#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QFileDialog>
#include <QAction>
#include <QMessageBox>

// 实现一个简单的记事本功能
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setWindowTitle("记事本");
    // 代码创建菜单栏
    QMenuBar* menuBar = this->menuBar();
    // 添加菜单
    QMenu* menu = new QMenu("文件");
    menuBar->addMenu(menu);
    // 添加动作
    QAction* actionBuild = new QAction("新建");
    QAction* actionOpen = new QAction("打开");
    QAction* actionSave = new QAction("保存");
    menu->addAction(actionBuild);
    menu->addAction(actionOpen);
    menu->addAction(actionSave);

    // 设定输入框
    edit = new QPlainTextEdit();
    QFont font; // 字体设定
    font.setPixelSize(20);
    edit->setFont(font);
    // 将输入框加入到窗口中
    this->setCentralWidget(edit);

    // 连接 QAction 的信号槽
    connect(actionBuild, &QAction::triggered, this, &MainWindow::handleActionBuild);
    connect(actionOpen, &QAction::triggered, this, &MainWindow::handleActionOpen);
    connect(actionSave, &QAction::triggered, this, &MainWindow::handleActionSave);
}

MainWindow::~MainWindow()
{
    delete ui;
}

// 新建窗口
void MainWindow::handleActionBuild()
{
    // 新建一个记事本窗口
    MainWindow *newNoteWindow = new MainWindow; // 创建一个新的记事本窗口实例

    // 显示新的记事本窗口
    newNoteWindow->show();
}

void MainWindow::handleActionOpen()
{
    // 1. 弹出打开文件
    QString path = QFileDialog::getOpenFileName(this);
    // 2. 将 路径信息 展示到statusBar上
    QStatusBar* statusBar = this->statusBar();
    statusBar->showMessage(path);

    // 3. 将文件加载到QFile中，并打开
    QFile file(path);
    if(!file.open(QFile::ReadWrite)) // open的返回值是bool
    {
        // 打开文件失败
        statusBar->showMessage("打开文件失败: " + path);
        return;
    }

    // 读取文件内容
    QString text = file.readAll();

    // 关闭文件
    file.close();

    // 将内容设置到输入框
    edit->setPlainText(text);
}

void MainWindow::handleActionSave()
{
    // 1. 弹出 保存文件
    QString path = QFileDialog::getSaveFileName(this);
    // 2. 保存路径信息到 状态栏
    QStatusBar* statusBar = this->statusBar();
    statusBar->showMessage(path);
    //
    QFile file(path);
    if(!file.open(QFile::WriteOnly))
    {
        statusBar->showMessage("打开文件失败: " + path);
        return;
    }

    // 写文件
    const QString& text = edit->toPlainText();
    file.write(text.toUtf8()); // 转为utf8

    // 关闭文件
    file.close();
}

